import { loginAPI, getUserInfoAPI, getUserIdAPI } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth'
export default {
  namespaced: true,
  state: {
    token: getToken() || '', // 如果初始值如果写''，刷新的时候会重置，token就会变回''
    userInfo: {}
  },
  mutations: {
    setToken(state, tokenValue) {
      // 存入vuex
      state.token = tokenValue
      // 存入cookie
      setToken(tokenValue)
    },
    setUserInfo(state, userValue) {
      state.userInfo = userValue
    },
    // 清空数据
    removeUserInfo(state) {
      state.token = ''
      state.userInfo = {}
      // 清空cookies里的token
      removeToken()
    }
  },
  actions: {
    async fetchLogin({ commit }, data) {
      // 1.调用接口请求 登录 获取token
      const res = await loginAPI(data)
      // res是在响应拦截器被解构过 响应拦截器里返回的data就是res
      // 2.拿到请求返回值(token) 提交
      commit('setToken', res)
    },
    // 获取用户信息接口
    async fetchUserInfo(ctx) {
      // 调用用户信息请求接口
      const res = await getUserInfoAPI()
      // console.log(res)
      // 调用获取头像的接口 然后把用户name的接口组合在一起 再存起来
      const resAvatar = await getUserIdAPI(res.userId)
      // 提交mutations方法 把获取用户信息和头像的两个对象合成一个对象
      ctx.commit('setUserInfo', { ...res, ...resAvatar })
    }
  }
}
